import axios from 'axios'
import store from '@/store'
import { Toast } from 'antd-mobile';
import { getTokens, setTokens,removeTokens } from './token';
import { history } from './history';
// console.log(store.getState().login.data, 'store')
// 创建实例

const http = axios.create({
  baseURL: 'http://toutiao.itheima.net/v1_0/',
})


// 添加请求拦截器
http.interceptors.request.use((config) => {
  // 获取缓存中的 Token 信息
  // const { token } = store.getState().login.data
  const {
    login: { token },
  } = store.getState()
  // console.log(token, 'token')
  if (token) {
    config.headers['Authorization'] = `Bearer ${token}`
  }
  return config;
});

// 添加响应拦截器
http.interceptors.response.use((response) => {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么
  return response.data;
}, async (error) => {
  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么
  if (!error.response) {
    Toast.show('网络繁忙，请稍后重试')
    return Promise.reject(error);
  }

  // 有相应 但是不是401
  if (error.response.status !== 401) {
    Toast.show(error.response.data.message)
    return Promise.reject(error);
  }

  let { token, refresh_token } = getTokens()
  // 如果是401错误
  // 没有token或者刷新token
  if (!token || !refresh_token) {
    history.replaceState('/login')
    return Promise.reject(error)
  }

  // 有token
  try {
    // 自动刷新
    const res = await http.put('authorizations', null,
      {
        headers: {
          ' Content-Type': 'application/x-www-form-urlencoded',
          Authorization: `Bearer ${refresh_token}`
        },
      }
    )
    setTokens({
      refresh_token,
      token: res.data.data.token,
    })
  } catch (err) {
    removeTokens()
    history.push('/login')
    return Promise.reject(error)
  }

  return Promise.reject(error);
});

export default http